#pragma once
#include <IGame/IGame.h>
#include <IGame/IGameObject.h>
#include <object.h>
#include "iMeshObject.h"

typedef IGameModifier iMaxModifier;
typedef IGameSkin iMaxSkin;

#ifdef IGAME_LIB
class iMaxObject : public IGameObject
#else // IGAME_LIB
class iMaxObject : public ObjectState
#endif // IGAME_LIB
{
public:
	enum eObjectType
	{
		eOBJET_UNKNOWN = IGameObject::IGAME_UNKNOWN,	/*!< An unknown object*/
		eOBJET_LIGHT = IGameObject::IGAME_LIGHT,	/*!< A Light Object */
		eOBJET_MESH = IGameObject::IGAME_MESH,		/*!< A Mesh Object */
		eOBJET_SPLINE = IGameObject::IGAME_SPLINE,	/*!< A Spline Object */
		eOBJET_CAMERA = IGameObject::IGAME_CAMERA,	/*!< A Camera Object */
		eOBJET_HELPER = IGameObject::IGAME_HELPER,	/*!< A Helper Object */
		eOBJET_BONE = IGameObject::IGAME_BONE,		/*!< A Bone Object */
		eOBJET_IKCHAIN = IGameObject::IGAME_IKCHAIN,	/*!< An IK Chain Object*/
		eOBJET_XREF = IGameObject::IGAME_XREF,      /*!< A XRef Object*/
	};
	enum eMaxType
	{
		eMAX_UNKNOWN = IGameObject::IGAME_MAX_UNKNOWN,	
		eMAX_GEOM = IGameObject::IGAME_MAX_GEOM,
		eMAX_SHAPE = IGameObject::IGAME_MAX_SHAPE,
		eMAX_LIGHT = IGameObject::IGAME_MAX_LIGHT,
		eMAX_CAMERA = IGameObject::IGAME_MAX_CAMERA,
		eMAX_BONE = IGameObject::IGAME_MAX_BONE,
		eMAX_HELPER = IGameObject::IGAME_MAX_HELPER,
	};
	enum eSkinType
	{
		ePHYSIQUE_TYPE,
		eSKIN_TYPE,
		eUNKNOWN_TYPE = 0xffffff,
	};

public:
	virtual ObjectTypes GetIGameType()
	{
		return IGAME_UNKNOWN;
	}	
	eObjectType GetObjectType();
	eMaxType GetMexObjectType();
	int NumModifiers();	
	iMaxModifier* GetModifier( int nIndex );
	bool GetMeshObject( iMeshObject& pMesh );
};

#include "iMaxObject.inl"